package com.mmall.Concurrency.example.singleton;

import com.mmall.Concurrency.annoations.ThreadSafe;

@ThreadSafe


//枚举，在实际调用的时候才做最开始的初始化，后续使用的时候可直接取到里面的值
public class SingletonExample7 {

    //不能随便new新的对象出来，则构造方法为私有的
    private SingletonExample7(){

    }

    public static SingletonExample7 getInstance(){
        //返回枚举类实例的方法
        return Singleton.INSTANCE.getInstance();
    }

    //定义私有的枚举类
    private enum Singleton{
        INSTANCE;

        private SingletonExample7 singletonExample7;
        //构造函数，被JVM保证该方法只调用一次，且是在该类被调用之前初始化的
        Singleton(){
            singletonExample7 = new SingletonExample7();
        }

        public SingletonExample7 getInstance(){
            return  singletonExample7;
        }
    }
}
